package edu.uoc.tdp.pac4.server.connexiomanteniment.db;

import java.sql.PreparedStatement;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.Date;
import edu.uoc.tdp.pac4.server.connexiomanteniment.exceptions.*;
import edu.uoc.tdp.pac4.connexiomanteniment.Administrador;
import edu.uoc.tdp.pac4.connexiomanteniment.Usuari;


public class GestorAdministrador extends Gestor {
	public GestorAdministrador() {}
	
	public Administrador getAdministrador(String login) throws ExceptionServer {
	 	Statement st = null; ResultSet rs = null; Administrador a = null;
		connect();
		try {
			String query = "SELECT idintern, tipususuari, idusuari, pwd, email, estatensistema, tipusdocumentid, document, nom, cognom1, cognom2, dataalta, usuarialta, databaixa, usuaribaixa, datamod, usuarimod " 
					+        "FROM usuari, administrador WHERE idintern = idadministrador AND idusuari = '" + login + "'";
			st = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
		 	rs = st.executeQuery(query);
		 	// hem suposat que el login es tambe identificador, es a dir no hi ha mes d'un usuari amb el mateix login
	 		if (rs.next()) {
				a = new Administrador(rs.getString("tipusdocumentid"),rs.getString("document"),rs.getString("nom"),rs.getString("cognom1"),rs.getString("cognom2"),rs.getString("idusuari"),rs.getString("pwd"),rs.getString("email"));
	 			a.setIdIntern(rs.getInt("idintern"));
	 			a.setEstatEnSistema(rs.getString("estatensistema").charAt(0));
	 			a.setDataCreacio(rs.getDate("dataalta"));
	 			a.setDataModificacio(rs.getDate("datamod"));
	 			a.setDataEsborrat(rs.getDate("databaixa"));
	 			a.setTipusUsuari(Usuari.TIPUS_USUARI_ADMINISTRADOR);   // tambe el podem treure de bdd, el tenim en el result set, pero ha de ser aquest, altrament les dades serien inconsistents		
	 			// no informo quin administrador ha fet les operacions, perque de fet en la pantalla de connexio i manteniment aixo no apareix mai
	 		} else throw new ExceptionServer(ExceptionServer.SERVER_DB_USER_NOT_EXIST);   // usuari no existent o no es administrador
		} catch (SQLException e) { ManageSQLException(e); } 
		finally { try { rs.close(); st.close(); disconnect(); } catch(Exception e) { throw new ExceptionServer(ExceptionServer.SERVER_DB_UNEXPECTED_ERROR); } }
		return a;
	}
	
	public void updateAdministrador(Administrador a) throws ExceptionServer {
		a.setDataModificacio(new Date()); GestorUsuari gu = new GestorUsuari(); gu._updateusuari(a);
	}
	
	public int insertAdministrador(Administrador a) throws ExceptionServer {
		a.setDataCreacio(new Date()); GestorUsuari gu = new GestorUsuari(); 
		int internalId = gu._insertusuari(a);
		// i ara falta insertar aquest internal id en la taula administrador
		connect();
		String insert = "INSERT INTO administrador(idadministrador) VALUES(?)";
    	PreparedStatement st = null;
    	try {
	    	st = connection.prepareStatement(insert,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
	 		st.setInt(1,internalId);
	 		st.execute();
		} catch (SQLException e) { ManageSQLException(e); } 
    	finally { disconnect(); }
		return internalId;
	}
	
	public void deleteAdministrador(Administrador a) throws ExceptionServer {
		a.setDataEsborrat(new Date()); a.setEstatEnSistema(Usuari.ESTAT_EN_SISTEMA_INACTIU); updateAdministrador(a);
	}
}
	
